package com.zr.d_c.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zr.d_c.model.Func;
import com.zr.d_c.service.FuncService;
import com.zr.d_c.serviceimpl.FuncServiceImpl;
/**
 * 增加功能
 * @author Administrator
 *
 */
public class AddFuncController extends HttpServlet {

	FuncService funcservice = new FuncServiceImpl();
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		List<Func> funcs = funcservice.getAllFunc();
		List<Func> firstfuncs = funcservice.getFirstFunc();
		
		List<Func> notfirstfuncs = funcservice.getNotFirstFunc();
 		String ffname = req.getParameter("box");
		String fname = req.getParameter("fname").trim();
		String fpath = req.getParameter("fpath");
		
		if(ffname==null){
			ffname = "";
		}else{
			ffname = ffname.trim();
		}

		//判断一级功能否为空 为空则默认添加的功能为一级功能
		if(ffname.equals("")){
			//判断添加功能是否为空 不为空 继续操作
			if(!fname.equals("")){
				boolean flag = false;
				//循环找出是否有该功能的名字
				for (Func func : funcs) {
					if(func.getFname().equals(fname)){
						flag = true;
						break;
					}
				}
				//如果没有则添加
				if(!flag){
					Func f = new Func(fname,fpath,1,"open");
					funcservice.addFunc(f);
					req.setAttribute("msg", "添加成功");
					req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
				}
				//如果有则返回，添加失败
				else{
					req.setAttribute("msg", "添加失败，已有一级功能的名字");
					req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
				}
			}
			//为空 返回
			else{
				req.setAttribute("msg", "添加失败，功能名字为空");
				req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
			}
		}//判断一级功能与二级功能是否重名
		else if(ffname.equals(fname)){
			req.setAttribute("msg", "添加失败，添加的一级功能与二级功能同名");
			req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
		}
		//一级功能不为空 ,并且与二级功能不重名
		else{
			//判断二级功能是否为空
			if(fname.equals("")){
				req.setAttribute("msg", "添加失败，功能名字为空");
				req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
			}else{	
				boolean flag = false;
				//循环判断非一级功能里否有添加的一级功能的名字
				for (Func func : notfirstfuncs) {
					if(func.getFname().equals(ffname)){
						flag = true;
						break;
					}
				}
				//要添加的一级功能不重名 继续
				if(!flag){
					flag = false;
					//循环循环判断一级功能里否有添加的一级功能的名字
					for (Func func : firstfuncs) {
						if(func.getFname().equals(ffname)){
							flag = true;
							break;
						}
					}
					//如果有 则直接取出相关的信息 并添加二级功能
					if(flag){
						flag = false;
						for (Func func : funcs) {
							if(func.getFname().equals(fname)){
								flag = true;
								break;
							}
						}
						if(!flag){
							Func ff = funcservice.getFuncByFname(ffname);
							Func f = new Func(fname,fpath,ff.getFid(),"open");
							funcservice.addFunc(f);
							req.setAttribute("msg", "添加成功");
							req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
						}else{
							req.setAttribute("msg", "添加失败，已有该二级功能的名字");
							req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
						}
					}
					//如果没有 则先添加一级功能 在添加二级功能
					else{
						flag = false;
						for (Func func : funcs) {
							if(func.getFname().equals(fname)){
								flag = true;
								break;
							}
						}
						if(!flag){
							Func ff = new Func(ffname,fpath,1,"closed");
							funcservice.addFunc(ff);
							Func f = new Func(fname,fpath,funcservice.getFuncByFname(ffname).getFid(),"open");
							funcservice.addFunc(f);
							req.setAttribute("msg", "添加成功");
							req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
						}else{
							req.setAttribute("msg", "添加失败，已有该二级功能的名字");
							req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
						}
					}
				}
				//要添加的一级功能重名
				else{
					req.setAttribute("msg", "添加失败，已有该一级功能的名字");
					req.getRequestDispatcher("func/addfunc.jsp").forward(req, resp);
				}
			}	
		}
	}
}
